Django
CookBook
매번 프로젝트 시작때마다 해야 할 것들이 있는데 까먹어서 적어둠
Django Migrate 방법
polls 라는 app 의 model을 migrate 하는 방법, 아래 명령을 순차적으로 실행한다.
- mysite/settings.py 에 INSTALLED_APPS 에
polls
추가 manage.py makemigrations polls
: Create a database schemamanage.py sqlmigrate polls 0001
: : Create a database schemamanage.py migrate
: Create a Python database-access API for objects in models.py
Django Cookies
Django에서는 Cookie를 관리할 수 있는 매서드를 제공한다.
HttpResponse 객체에 cookie와 관련된 함수는 2개로 set_cookie
와 delete_cookie
가 있다.
HttpRequest의 경우 request.COOKIE['cookie_name']
형식으로 접근이 가능하다.
manage.py 에 사용자명령 추가하기
https://docs.djangoproject.com/en/1.10/howto/custom-management-commands/
Django의 User 모델 커스터마이징
모델
Admin 기능
Ajax load
이건 한 번에 못 쓸것 같다. 간단하게 필요했던 기능과 어떻게 해결했는지만 적어보려고 한다. 키워드로 찾길 권장하고 싶다.
특정 영역의 html 부분만 ajax로 불러올 수가 있다. jQuery Ajax의 load 함수가 그런 용도로 쓰인다. 사용 방법은 [$(selector).load(URL, data, callback)](http://api.jquery.com/load/)
형식이다. Django에서 사용하려면 메인 템플릿에서 특정 영역을 템플릿으로 분리한다. 그리고 분리된 부분을 [{% include 'template_name' %}](https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#include)
으로 대체한다. 그리고 Django의 URL과 해당 View 함수
를 추가한다. View 함수에서는 template과 해당 context를 HttpResponse로 리턴하면 된다.
간단한 예제를 준비했다.
url.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'board/select/$', views.select_board_posts),
]
view.py
from django.http import HttpResponse
from django.template import loader, Context
from .models import Posts
def select_board_posts(request):
tpl = load.get_template("board_detail.html")
posts = Posts.objects.all()
ctx = Context({
'posts': posts
})
return HttpResponse(tpl.render(ctx))
board.html
<!-- board.html -->
<h1>Board</h1>
<div id='board-detail'>
{% include 'board_detail.html' %}
<Button onclick='onClickButton()'>출력</Button>
</div>
<script>
function onClickButton() {
// 이 부분이 ajax의 load를 사용하는 부분, DB에 새로운 Post를 추가하고 테스트 해보자.
$("#board-detail").load("board/select #board-detail-title");
}
</script>
board_detail.html
<div id='board-detail-title'>
{% for post in posts %}
<h4>{{ post.title }}</h4>
{% endfor %}
</div>
버그 수정 중에 알게 된 것들
ajax
를 사용할때view
내부에서django.contrib.auth
의get_user(request)
함수를 사용할때Errno 10053
가 발생할 수도 있다. get_user와 request의 쓰기 과정에서 뭔가 싱크가 맞지 않아서 생기는 것 같다. 간혈적으로 발생할 수도 아닐 수도 있다. (지금 쓰고 있는 원인이 정확하지 않아서 답답하다)